package engine.stars;

import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

/**
 * Абстрактный класс звезд.
 *
 * @author Oleksij Golenko
 */
public abstract class Star {
	/* Спектральные классы звезд. */
	public final static int SPECTRAL_CLASS_M = 0;
	public final static int SPECTRAL_CLASS_K = 1;
	public final static int SPECTRAL_CLASS_G = 2;
	public final static int SPECTRAL_CLASS_F = 3;
	public final static int SPECTRAL_CLASS_A = 4;
	public final static int SPECTRAL_CLASS_B = 5;
	public final static int SPECTRAL_CLASS_O = 6;

	/* Цвета звезд. */
	public final static int COLOR_RED = 0;
	public final static int COLOR_ORANGE = 1;
	public final static int COLOR_YELLOW = 2;
	public final static int COLOR_YELLOW_WHITE = 3;
	public final static int COLOR_WHITE = 4;
	public final static int COLOR_WHITE_BLUE = 5;
	public final static int COLOR_BLUE = 6;

	/* Светимость звезд. */
	public final static int LUMINOCITY_DIM = 0;
	public final static int LUMINOCITY_NORMAL = 1;
	public final static int LUMINOCITY_BRIGHT = 2;
	public final static int LUMINOCITY_VERY_BRIGHT = 3;

	/**
	 * Возвращает имя звезды.
	 *
	 * @return имя звезды
	 */
	public abstract String getName();

	/**
	 * Возвращает локализированное имя звезды.
	 *
	 * @return локализированное имя звезды
	 * @throws MissingResourceException файл ресурсов для локализации не найден
	 */
	public String getLocalisedName() {
		String name = null;

		ResourceBundle bundle =
			ResourceBundle.getBundle("engine.stars.StarResources", Locale.getDefault());

		try {
			name = (String) bundle.getString(getName());
		} catch (MissingResourceException e) {
		}

		return (name == null) ? getName() : name;
	}

	/**
	 * Возвращает температуру звезды.
	 *
	 * @return температура звезды
	 */
	public abstract int getTemperature();

	/**
	 * Возвращает размер звезды.
	 *
	 * @return размер звезды
	 */
	public abstract double getSize();

	/**
	 * Возвращает цвет звезды.
	 *
	 * @return цвет звезды
	 */
	public abstract int getColor();

	/**
	 * Возвращает светимость звезды.
	 *
	 * @return светимость звезды
	 */
	public abstract int getLuminocity();
}
